package partThree;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

/**本类用于ArrayList相关测试*/
public class TestArrayList {
    public static void main(String[] args) {
        //1.创建对应的集合对象
        /**底层会自动帮我们创建数组来存放对象，并且数组的初始容量是10*/
        ArrayList<Integer> list = new ArrayList();

        //2.向集合中添加元素，用于测试
        list.add(100);
        list.add(200);
        list.add(300);
        list.add(400);
        list.add(400);
        list.add(300);
        System.out.println(list); //打印查看集合中的元素

        //3.测试常用方法
        //list.clear();  //清空集合

        System.out.println(list.contains("100"));//false  因为这个100是字符串
        System.out.println(list.get(0));//100,根据下标获取元素
        System.out.println(list.indexOf(400));//3，判断指定元素第一次出现的位置
        System.out.println(list.lastIndexOf(400));//4，判断指定元素最后一次出现的位置
        System.out.println(list.remove(0)); //删除集合中0号索引处的元素

        //System.out.println(list.remove(300));
        /**上面的代码会报错：数组下标越界：index:300 size:5
         * 数组中传入的是integer,是引用类型，不是基本类型，输入300默认为元素位置
         * 主要是因为List中有两个重载的remove(),如果传入的是300
         * 会认为是int类型的index索引，所以如果想指定元素删除数据
         * 需要把int类型的300手动装箱成Integer类型*/
        System.out.println(list.remove(Integer.valueOf(300)));

        System.out.println(list);
        System.out.println(list.size());//获取集合中元素的个数
        System.out.println(list.set(0,77));//修改指定位置的值

        //4. 迭代集合
        //4.1 使用for循环
        System.out.println("------------方式1-------------");
        for (int i=0; i<list.size(); i++){//循环集合
            System.out.println(list.get(i));//根据本轮循环到的索引获取集合中对应的元素
        }
        //4.2 使用高效循环
        System.out.println("------------方式2-------------");
        for(Integer num :list){//for(元素类型 元素名  ： 要遍历的集合名){循环体}
            System.out.println(num); //打印每轮遍历到的元素
        }
        //4.3 使用 Iterator
        System.out.println("------------方式3-------------");
        Iterator<Integer> it = list.iterator();//获取迭代器对象
        //循环迭代集合中的所有元素
        while(it.hasNext()){//判断是否有下一个元素可迭代，如果有，继续循环
            System.out.println(it.next());//打印本轮迭代到的元素
        }
        //4.4 使用 ListIterator
        System.out.println("------------方式4-------------");
        ListIterator<Integer> it2 = list.listIterator(); //获取迭代器对象
        //循环迭代集合中的所有元素
        while(it2.hasNext()){//判断是否有下一个元素可迭代，如果有，继续循环
            System.out.println(it2.next());//打印本轮迭代到的元素
        }
    }
}